package org.ala.tiktools.rpc.plugin.load_balance;

import org.ala.tiktools.rpc.client_server.client.AlaRpcClient;
import org.ala.tiktools.rpc.plugin.node.INode;
import org.ala.tiktools.rpc.plugin.node.NodeKey;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.EnvironmentAware;

/**
 * 路由器
 * <p>  负责持有连接池
 * <p>  负责选择有效连接
 * <p>  负责更新连接池
 * <p>  当无法选择有效连接时，返回结果
 * <p>  给每个服务生成一个loadBalance，如果是私有链接模式，则client持有自己的loadBalance
 *
 * @author ala
 * @date 2025-04-04 14:36
 */
public interface ILoadBalance extends ApplicationContextAware, EnvironmentAware {
    /**
     *  在节点组中选择一个节点
     */
    INode select(String group);
    /**
     *  上报延迟
     *  <p> 没啥意义。业务请求的规模都不一样，这样对比的数据是不公平的
     *  @param k    node的key
     *  @param rtt  一次消息往返的延迟
     */
    @Deprecated
    void rtt(NodeKey k, long rtt);


    /**
     *  根据AlaRpcClient追加节点
     *  <p> 节点信息是逐步追加进loadBalance的
     */
    void loadRpcClient(AlaRpcClient anno);
}
